/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package prostagra;

import java.awt.Graphics2D;
import java.util.Iterator;
import obiekty.ObiektRuchomy;
import obiekty.ObiektStaly;
import obiekty.PociskBolter;
import obiekty.Rakieta;

/**
 *
 * @author m
 */
public class MapaRenderer
{

    public void draw(Graphics2D g, Mapa mapa,
            int screenWidth, int screenHeight)
    {
        ObiektRuchomy gracz = mapa.getGracz();

        int offsetX = 0;
        int offsetY = 0;

        if (gracz.getPozycja().x - screenWidth / 2 > 0)
        {
            offsetX = (int) gracz.getPozycja().x - screenWidth / 2;
            if (offsetX > mapa.getSzerokoscPlanszy() - screenWidth)
            {
                offsetX = mapa.getSzerokoscPlanszy() - screenWidth;
            }
        }
        if (gracz.getPozycja().y - screenHeight / 2 > 0)
        {
            offsetY = (int) gracz.getPozycja().y - screenHeight / 2;
            if (offsetY > mapa.getWysokoscPlanszy() - screenHeight)
            {
                offsetY = mapa.getWysokoscPlanszy() - screenHeight;
            }
        }



        // draw black background, if needed
        g.setColor(java.awt.Color.BLACK);
        g.fillRect(0, 0, screenWidth, screenHeight);

        // draw parallax background image
        if (mapa.getBackground() != null)
        {
            g.drawImage(mapa.getBackground(), -offsetX, -offsetY, mapa.getSzerokoscPlanszy(), mapa.getWysokoscPlanszy(), null);
        }

        g.setColor(java.awt.Color.RED);

        synchronized (mapa.getObiektyStale())
        {
            // rysowanie obiektów stałych
            Iterator i = mapa.getObiektyStale().iterator();
            while (i.hasNext())
            {
                ObiektStaly o = (ObiektStaly) i.next();

                g.drawImage(o.getImage(), (int) o.getPozycja().x - (int) o.getWidth() / 2 - offsetX, (int) o.getPozycja().y - (int) o.getHeight() / 2 - offsetY, null);
            }

            // rysowanie gracza

            g.rotate(gracz.getOrientacja().angle(gracz.getPozycja()), (int) gracz.getPozycja().x - offsetX, (int) gracz.getPozycja().y - offsetY);
            g.drawImage(gracz.getImage(), (int) gracz.getPozycja().x - (int) gracz.getWidth() / 2 - offsetX, (int) gracz.getPozycja().y - (int) gracz.getHeight() / 2 - offsetY,
                    null);
            g.rotate(-gracz.getOrientacja().angle(gracz.getPozycja()), (int) gracz.getPozycja().x - offsetX, (int) gracz.getPozycja().y - offsetY);

            g.setColor(new java.awt.Color((int) (255.0 * ((double) gracz.getMaxZycie() - (double) gracz.getZycie()) / (double) gracz.getMaxZycie()),
                    (int) (255.0 * (double) gracz.getZycie() / (double) gracz.getMaxZycie()),
                    0,
                    200));
            g.fillRect((int) gracz.getPozycja().x - (int) gracz.getWidth() / 2 - 1 - offsetX,
                    (int) gracz.getPozycja().y - (int) gracz.getHeight() / 2 - 10 - offsetY,
                    (int) ((double) gracz.getZycie() / (double) gracz.getMaxZycie() * 30.0),
                    5);
        }

        synchronized (mapa.getObiektyRuchome())
        {
            // rysowanie innych
            Iterator i = mapa.getObiektyRuchome().iterator();
            while (i.hasNext())
            {
                ObiektRuchomy o = (ObiektRuchomy) i.next();
                g.rotate(o.getOrientacja().angle(o.getPozycja()),
                        /*mapa.getSzerokoscPlanszy() - */ (int) o.getPozycja().x - offsetX,
                        /*mapa.getWysokoscPlanszy() - */ (int) o.getPozycja().y - offsetY);
                g.drawImage(o.getImage(),
                        /*mapa.getSzerokoscPlanszy() - */ (int) o.getPozycja().x - (int) o.getWidth() / 2 - offsetX,
                        /* mapa.getWysokoscPlanszy() - */ (int) o.getPozycja().y - (int) o.getHeight() / 2 - offsetY, null);
                g.rotate(-o.getOrientacja().angle(o.getPozycja()),
                        /*mapa.getSzerokoscPlanszy() - */ (int) o.getPozycja().x - offsetX,
                        /*mapa.getWysokoscPlanszy() - */ (int) o.getPozycja().y - offsetY);

                if (o instanceof PociskBolter == false && o instanceof Rakieta==false)
                {
                    g.setColor(new java.awt.Color((int) (255.0 * ((double) o.getMaxZycie() - (double) o.getZycie()) / (double) o.getMaxZycie()),
                            (int) (255.0 * (double) o.getZycie() / (double) o.getMaxZycie()),
                            0,
                            200));
                    g.fillRect((int) o.getPozycja().x - (int) o.getWidth() / 2 - 1 - offsetX,
                            (int) o.getPozycja().y - (int) o.getHeight() / 2 - 10 - offsetY,
                            (int) ((double) o.getZycie() / (double) o.getMaxZycie() * 30.0),
                            5);
                }
            }
        }
    }
}
